home *** CD-ROM | disk | FTP | other *** search
/ Aminet 50 / Aminet 50 (2002)(GTI - Schatztruhe)[!][Aug 2002].iso / Aminet / util / wb / BWS_Scalos.lha / BWS_Scalos / Scalos_Rename / Rename.module.e < prev    next >
Text File  |  2001-12-06  |  19KB  |  640 lines

  1. OPT PREPROCESS
  2. OPT STACK=320000
  3.  
  4. MODULE '*other','*loc','*locnums','muimaster','libraries/mui','libraries/muip',
  5.        'tools/file','mui/muicustomclass','amigalib/boopsi','afc/localer',
  6.        'libraries/gadtools','tools/exceptions','intuition/classes',
  7.        'intuition/classusr','scalos','scalos/scalos',
  8.        'intuition/screens','intuition/intuition','mui/betterstring_mcc',
  9.        'utility/tagitem','utility/hooks','utility/utility','tools/installhook',
  10.        'workbench/startup','workbench/workbench','libraries/asl',
  11.        'amigaini','amigainibase'
  12.  
  13. DEF app=0,window,wingroup,typA:PTR TO LONG,listT:PTR TO LONG,
  14.     disp1Hook:hook,cmp1Hook:hook,appMsgHook:hook,renameHook:hook,rxsetHook:hook,rxaddHook:hook,
  15.      running=TRUE,v,lo=0:PTR TO localer,loclang,ai=0:PTR TO amigaini,
  16.     verN, verS, menu,menuob,prefsmod[256]:STRING,
  17.     label,labtext[550]:STRING,deftitle, ok,skip,quit,
  18.     wb:PTR TO wbstartup, args:PTR TO wbarg,lv,string,popB,current[512]:STRING,currenttype[20]:STRING,
  19.     textmode=3,strpaths=0,listformat[100]:STRING,listtitle=1,listshow=1,highlight=1,onreturn=0,popS=1,
  20.     shoT,typT,pthT,menucheck[2]:LIST,guide,mc[2]:ARRAY OF mui_command
  21.  
  22. PROC main() HANDLE
  23.   DEF sigs=0, result,str[512]:STRING
  24. deftitle:='Scalos Rename'
  25. verN:='40.9'
  26. verS:='$VER: Scalos_Rename 40.9 (06.12.2001)'
  27.  
  28. lo:=startlocale(lo)
  29. loclang:=lo.language()
  30.  
  31. typA:=NEW[locs(lo,MSG_Disk),locs(lo,MSG_Dir),locs(lo,MSG_File),locs(lo,MSG_Error)]:LONG
  32. listT:=NEW[locs(lo,MSG_Type),locs(lo,MSG_Name),locs(lo,MSG_Path)]:LONG
  33.  
  34.   IF (muimasterbase:=OpenLibrary(MUIMASTER_NAME,MUIMASTER_VMIN))=NIL THEN
  35.     Raise(failedOpen('muimaster.library'))
  36.  
  37.   IF (amigainibase:=OpenLibrary(AMIGAINI_NAME,AMIGAINI_VMIN))=NIL THEN
  38.     Raise(failedOpen('amigaini.library'))
  39.  
  40. ListCopy(menucheck,[$9,$109])
  41.  
  42.  IF FileLength('mui:libs/mui/betterstring.mcc')<1 THEN Raise(failedOpen('BetterString_mcc'))
  43.  
  44.  IF wbmessage=NIL
  45.  Raise(locs(lo,MSG_NotCli))
  46.  ELSE
  47.     wb:=wbmessage
  48.     args:=wb.arglist
  49.       IF wb.numargs<2
  50.       Raise(locs(lo,MSG_NoFiles))
  51.       ENDIF
  52. ENDIF
  53.   installhook(appMsgHook,{appMsgFunc})
  54.   installhook(disp1Hook,{disp1Func})
  55.   installhook(cmp1Hook,{cmp1Func})
  56.   installhook(renameHook,{renameFunc})
  57.   installhook(rxsetHook,{rxsetFunc})
  58.   installhook(rxaddHook,{rxaddFunc})
  59.  
  60.  
  61. loadsettings()
  62.  
  63.   menu := [ NM_TITLE,0, locs(lo,MNU_Main)    , 0 ,0,0,0,
  64.             NM_ITEM ,0, locs(lo,MNU_Settings) ,0,0,0,"pref",
  65.             NM_ITEM ,0, locs(lo,MNU_Quit)     ,'Q',0,0,MUIV_Application_ReturnID_Quit,
  66.             NM_TITLE,0, locs(lo,MNU_About)     , 0 ,0,0,0,
  67.             NM_ITEM ,0, deftitle     ,'?',0,0,ID_ABOUT,
  68.             NM_ITEM ,0, 'MUI'         ,'M',0,0,ID_ABOUTMUI,
  69.             NM_END  ,0, NIL          , 0 ,0,0,0]:newmenu
  70.  
  71. getguide()
  72.  
  73.  makemc(mc[0],['SETPREFS', 0 , 0 , rxsetHook])
  74.  makemc(mc[1],['ADDFILE', 'PATH/A' , 1 , rxaddHook])
  75.  makemc(mc[2],[0, 0 , 0 , 0])
  76.  
  77.   app:=ApplicationObject,
  78.     MUIA_Application_Title      , deftitle,
  79.     MUIA_Application_Version    , verS,
  80.     MUIA_Application_Copyright  , '©2000/2002, Bruce Steers',
  81.     MUIA_Application_Author     , 'Bruce Steers',
  82.     MUIA_Application_Description, 'Rename Module for Scalos',
  83.     MUIA_Application_Base       , 'SCALOS_RENAME',
  84.     MUIA_Application_HelpFile   , guide,
  85.     MUIA_Application_Menustrip  , menuob := Mui_MakeObjectA(MUIO_MenustripNM,[menu,0]),
  86.     MUIA_Application_Commands, mc,
  87.  
  88.     SubWindow, window:= WindowObject,
  89.       MUIA_Window_Title    , deftitle,
  90.       MUIA_Window_ID       , "MAIN",
  91.       MUIA_Window_AppWindow, MUI_TRUE,
  92.       WindowContents, wingroup:=VGroup,
  93.         Child, label:=Label(labtext),
  94.         Child, HGroup,
  95.          MUIA_Group_HorizSpacing,0,
  96.          Child, string:=BetterStringObject,
  97.           StringFrame,
  98.           MUIA_String_Contents,'',
  99.           MUIA_String_MaxLen,512,
  100.           End,
  101.           Child, popB:= PopButton(MUII_PopFile),
  102.         End,
  103.  
  104.         Child, HGroup,
  105.         Child, ok:=SimpleButton(locs(lo,GAD_Ok)),
  106.         Child, skip:=SimpleButton(locs(lo,GAD_Skip)),
  107.         Child, quit:=SimpleButton(locs(lo,GAD_Cancel)),
  108.         End,
  109.         Child, lv:=makeLV(),
  110.       End,
  111.     End,
  112.   End
  113.  
  114.   IF (app=NIL) THEN Raise(locs(lo,MSG_NoApp))
  115.  
  116.   doMethodA(window,[MUIM_Notify,MUIA_Window_CloseRequest,MUI_TRUE,
  117.     app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit])
  118.  
  119.   doMethodA(lv,[MUIM_Notify,MUIA_AppMessage,MUIV_EveryTime,
  120.     lv,3,MUIM_CallHook,appMsgHook,MUIV_TriggerValue])
  121.  
  122.   doMethodA(quit,[MUIM_Notify,MUIA_Pressed,0,
  123.     app,2,MUIM_Application_ReturnID,MUIV_Application_ReturnID_Quit])
  124.  
  125.   doMethodA(string,[MUIM_Notify,MUIA_String_Acknowledge,MUIV_EveryTime,
  126.     app,3,MUIM_CallHook,renameHook,"R"])
  127.  
  128.   doMethodA(ok,[MUIM_Notify,MUIA_Pressed,0,
  129.     app,3,MUIM_CallHook,renameHook,"P"])
  130.  
  131.   doMethodA(skip,[MUIM_Notify,MUIA_Pressed,0,
  132.     app,2,MUIM_Application_ReturnID,"skip"])
  133.  
  134.   doMethodA(popB,[MUIM_Notify,MUIA_Pressed,0,
  135.     app,2,MUIM_Application_ReturnID,"popB"])
  136.  
  137.   set(app,MUIA_Application_DropObject,lv)
  138.   set(popB,MUIA_ShowMe,popS)
  139.  
  140. addfiles()
  141. setlabel()
  142.  
  143.   set(window,MUIA_Window_Open,MUI_TRUE)
  144.  
  145.   WHILE running
  146.   result:=doMethodA(app,[MUIM_Application_NewInput,{sigs}])
  147.   SELECT result
  148.   CASE MUIV_Application_ReturnID_Quit; running:=0
  149.   CASE ID_ABOUT; muireq(deftitle,StringF(str,'\n\ec\e1\s\e0\n\nBy \e1Bruce steers\e0\n<bsteers@ukonline.co.uk>\nhttp://web.ukonline.co.uk/bsteers/\n\nFor the EXCELLENT \e1Scalos\e0\nhttp://www.scalos.com\n',verS),'_OK',app)
  150.   CASE ID_ABOUTMUI;doMethodA(app,[MUIM_Application_AboutMUI,window])
  151.   CASE ID_HELP;    doMethodA(app,[MUIM_Application_ShowHelp,window,0,0,0]);
  152.   CASE "pref"; openmod()
  153.   CASE "skip"; listAdvance()
  154.  
  155.   CASE "popB"; reqname()
  156.   ENDSELECT
  157.  
  158.     IF (running AND sigs) THEN sigs:=Wait(sigs)
  159.  
  160.   ENDWHILE
  161.  
  162.  
  163. EXCEPT DO
  164.  
  165. IF exception<>0
  166. StringF(str,'\s !\n\n\s',locs(lo,MSG_EXCEPT),exception)
  167. IF app=0 THEN WriteF('\s\n',str) ELSE muireq(deftitle,str,'_OK',app,0)
  168. ENDIF
  169.  
  170.   IF app THEN Mui_DisposeObject(app)
  171.   IF muimasterbase THEN CloseLibrary(muimasterbase)
  172.  
  173.   IF ai THEN END ai
  174.   IF amigainibase THEN CloseLibrary(amigainibase)
  175.   IF lo THEN END lo
  176. ENDPROC
  177.  
  178.  
  179. PROC appMsgFunc(obj,x:PTR TO LONG)
  180.   DEF ap:PTR TO wbarg, amsg:PTR TO appmessage,
  181.       buf[512]:STRING,str[512]:STRING,lp:PTR TO lvo,i=1
  182.   amsg:=x[]
  183.   ap:=amsg.arglist
  184.     FOR i:=1 TO amsg.numargs
  185.     NameFromLock(ap.lock,buf,512)
  186.     StrCopy(str,buf)
  187.     AddPart(str,ap.name,512)
  188.     IF str[StrLen(str)-1]="/" THEN str[StrLen(str)-1]:=0
  189.      IF str[StrLen(str)-1]=":";
  190.      str[StrLen(str)-1]:=0
  191.      lp:=NEW[typA[0],news(str),'']:lvo
  192.      ELSE
  193.      lp:=NEW[type(str),news(FilePart(str)),news(StrCopy(str,str,StrLen(str)-StrLen(FilePart(str)))),news(str)]:lvo
  194.      ENDIF
  195.  
  196.     IF isinlist(lp)=0 THEN doMethodA(obj,[MUIM_List_InsertSingle,lp,MUIV_List_Insert_Sorted])
  197.     ap++
  198.     ENDFOR
  199.  
  200. top2str()
  201. ENDPROC 0
  202.  
  203. PROC makeLV() IS
  204.   ListviewObject,
  205.   MUIA_ShowMe,listshow,
  206.     MUIA_Listview_Input, 0,
  207.     MUIA_Listview_List , ListObject,
  208.       ReadListFrame,
  209.       MUIA_List_Title, listtitle,
  210.       MUIA_List_DisplayHook,disp1Hook,
  211.       MUIA_List_CompareHook,cmp1Hook,
  212.       MUIA_List_Format,listformat,
  213.     End,
  214.   End
  215.  
  216. PROC addfiles(); DEF lp:lvo,a,buf[512]:STRING,str[512]:STRING
  217.     FOR a:=1 TO wb.numargs-1
  218.     NameFromLock(args[a].lock,buf,512)
  219.     StrCopy(str,buf)
  220.     AddPart(str,args[a].name,512)
  221.     IF str[StrLen(str)-1]="/" THEN str[StrLen(str)-1]:=0
  222.      IF str[StrLen(str)-1]=":";
  223.      str[StrLen(str)-1]:=0
  224.      lp:=NEW[typA[0],news(str),'',news(str)]:lvo
  225.      ELSE
  226.      lp:=NEW[type(str),news(FilePart(str)),news(StrCopy(str,str,StrLen(str)-StrLen(FilePart(str)))),news(str)]:lvo
  227.      ENDIF
  228.  
  229.     IF isinlist(lp)=0 THEN doMethodA(lv,[MUIM_List_InsertSingle,lp,MUIV_List_Insert_Sorted])
  230.     ENDFOR
  231.  
  232. top2str()
  233. ENDPROC
  234.  
  235. PROC listAdvance()
  236. doMethodA(lv,[MUIM_List_Remove,MUIV_List_Remove_First])
  237. top2str()
  238. ENDPROC
  239.  
  240. PROC top2str(); DEF lp:PTR TO lvo,ne
  241. get(lv,MUIA_List_Entries,{ne})
  242. IF ne=0
  243. running:=0
  244. RETURN
  245. ELSEIF ne=1;
  246. set(skip,MUIA_ShowMe,0)
  247. ENDIF
  248.  
  249. doMethodA(lv,[MUIM_List_GetEntry,0,{lp}])
  250. StrCopy(current,lp.pth)
  251. AddPart(current,lp.nam,StrMax(current))
  252. set(string,MUIA_String_Contents,IF strpaths THEN current ELSE lp.nam)
  253. StrCopy(currenttype,lp.typ)
  254. setlabel()
  255. set(window,MUIA_Window_ActiveObject,string)
  256. set(string,MUIA_BetterString_SelectSize,IF highlight THEN 0-StrLen(lp.nam) ELSE 0)
  257. set(popB,MUIA_Disabled, (Abs(StrCmp(lp.typ,typA[0]))) OR (strpaths=0))
  258. IF listshow THEN set(lv,MUIA_ShowMe,Abs(ne>1))
  259. ENDPROC
  260.  
  261. PROC loadsettings()
  262.  
  263. NEW ai
  264.  
  265. Ini_Init(ai,'ENV:Scalos/Rename.ini')
  266. Ini_Read(ai)
  267.  
  268. IF ai.error<>INIE_Ok THEN setDefaults()
  269.  
  270. IF StrCmp(ListItem(ai.list,1),';') THEN setDefaults()
  271.  
  272. Ini_FindGroup(ai,'Misc Options')
  273.  
  274. StringF(prefsmod,'\s',Ini_GetStr(ai,'PREFSFILE','Scalos:Prefs/Modules/Rename.prefs'))
  275.  
  276. Ini_FindGroup(ai,'Text Options')
  277. textmode :=Ini_GetInt(ai,'TEXTMODE',3)
  278. shoT :=Ini_GetInt(ai,'TEXTSHOW',1)
  279. typT:=Abs(Odd(textmode))
  280. pthT:=Abs(textmode>=2)
  281.  
  282.  
  283. Ini_FindGroup(ai,'List Options')
  284. StringF(listformat,'\s',Ini_GetStr(ai,'LISTFORMAT','COL=0 BAR,COL=1 BAR,COL=2'))
  285.  
  286. listtitle:=Ini_GetInt(ai,'LISTTITLE',1)
  287. listshow :=Ini_GetInt(ai,'LISTSHOW',1)
  288.  
  289. Ini_FindGroup(ai,'String Options')
  290. strpaths :=Ini_GetInt(ai,'STRINGPATHS',0)
  291. highlight:=Ini_GetInt(ai,'HIGHLIGHT',1)
  292. popS     :=Ini_GetInt(ai,'POPFILE',1)
  293. onreturn :=Ini_GetInt(ai,'ONRETURN',0)
  294. ENDPROC
  295.  
  296. PROC setDefaults()
  297. IF ai.length
  298. SetList(ai.list,0)
  299. ai.length:=0
  300. ENDIF
  301. Ini_NewGroup(ai,'Misc Options')
  302. Ini_NewGroup(ai,'Text Options')
  303. Ini_NewGroup(ai,'List Options')
  304. Ini_NewGroup(ai,'String Options')
  305. ENDPROC
  306.  
  307.  
  308. PROC checkBD(o,n); DEF p,dev,op,np,bd,m,l,list:PTR TO LONG,c,str[512]:STRING
  309. p:=InStr(o,':')
  310. IF p=-1 THEN RETURN
  311. StrCopy(str,o,p+1); dev:=news(str)
  312. MidStr(str,o,p); op:=news(str)
  313. MidStr(str,n,p); np:=news(str)
  314. StringF(str,'\s.backdrop',dev); bd:=news(str)
  315.  
  316. IF FileLength(bd)<=0 THEN RETURN
  317. m,l:=readfile(bd)
  318. IF l<=0 THEN RETURN
  319.  
  320. p:=countstrings(m,l)
  321. list:=stringsinfile(m,l,p)
  322.  
  323. FOR c:=0 TO p-1
  324. IF StrCmp(list[c],op)
  325. list[c]:=news(np)
  326. writebd(bd,list,p)
  327. ENDIF
  328. ENDFOR
  329. freefile(m)
  330. ENDPROC
  331.  
  332.  
  333.  
  334.  
  335.  
  336. PROC renameFunc(args:PTR TO LONG) HANDLE
  337. DEF str[512]:STRING,newname[512]:STRING,oldname[512]:STRING,
  338.     lp:PTR TO lvo,copy
  339.  
  340. IF (args[0]="R") AND (onreturn=0) THEN Raise(-10)
  341. doMethodA(lv,[MUIM_List_GetEntry,0,{lp}])
  342.  
  343. StringF(oldname,'\s',lp.pth)
  344. AddPart(oldname,lp.nam,512)
  345. StringF(oldname,'\s',oldname)   -> Makes it the proper EString
  346.  
  347.  
  348. get(string,MUIA_String_Contents,{newname})
  349. IF StrLen(newname)=0
  350. muireq(deftitle,StringF(str,'\s !\n\s',locs(lo,MSG_Error),locs(lo,MSG_StringEmpty)),locs(lo,GAD_Ok),app)
  351. Raise(-5)
  352. ENDIF
  353.  IF strpaths=0
  354.  StringF(str,'\s',lp.pth)
  355.  AddPart(str,newname,512)
  356.  StringF(newname,'\s',str)
  357.  ENDIF
  358.  
  359.  IF StrCmp(IF strpaths THEN oldname ELSE lp.nam,newname)=0
  360.  
  361. /*  RELABEL DISK  */
  362.    IF StrCmp(lp.typ,typA[0]);
  363.    StrAdd(oldname,':')
  364.      IF volExists(newname);
  365.      StringF(str,'Volume: ''\s''\n\s',newname,locs(lo,MSG_VolExists))
  366.      v:=muireq(deftitle,str,locs(lo,GAD_RenCan),app)
  367.      IF v=0 THEN Raise(-5)
  368.      ENDIF
  369.      IF Relabel(oldname,newname)=FALSE
  370.      muireq(deftitle,StringF(str,'\s !\n\s\n\s\n\s',locs(lo,MSG_LabelErr),oldname,locs(lo,MSG_RenameTo),newname),locs(lo,GAD_Ok),app)
  371.      Raise(-5)
  372.      ENDIF
  373.    ELSE
  374.  
  375. /* RENAME FILE  */
  376.  
  377.  /* Handling for existing files/dirs */
  378.  
  379.    copy:= (nStrCmp(devname(oldname),devname(newname))=0)
  380.    IF copy<>0
  381.    v:=renameD(/*oldname,newname*/)
  382.    Raise(-5)
  383.    ENDIF
  384.  
  385.    IF (FileLength(newname)<>-1) AND (nStrCmp(oldname,newname)=0) THEN
  386.     IF (v:=bump(newname,deftitle,app,window,lo))<0 THEN
  387.      Raise(v+1)
  388. /* Attempt rename (or copy) and report any errors */
  389.    v:=renameN(oldname,newname)
  390.    /* IF copy=0 THEN v:=renameN(oldname,newname) ELSE v:=renameD(/*oldname,newname*/) */
  391.      IF v<>-1
  392.      muireq(deftitle,StringF(str,'\s\n\s\n\s\n\s\n\n\s:\n\s',locs(lo,MSG_RenameErr),oldname,locs(lo,MSG_RenameTo),newname,locs(lo,MSG_Reason),v),locs(lo,GAD_Ok),app)
  393.      Raise(-5)
  394.      ENDIF
  395.  
  396.    checkBD(oldname,newname)
  397.    ENDIF
  398.  ENDIF
  399.  
  400. EXCEPT DO
  401.  SELECT exception
  402.  CASE -5; top2str()
  403.  CASE -10;
  404.  DEFAULT; listAdvance()
  405.  ENDSELECT
  406. ENDPROC
  407.  
  408. PROC renameN(o,n); DEF oni,nni,str[512]:STRING
  409. IF InStr(n,'/')<>-1 THEN IF dirtree(n)=0 THEN RETURN locs(lo,MSG_DirErr)
  410.  
  411. nni:=icon(n)
  412. oni:=icon(o)
  413.  
  414. IF FileLength(o)>=0 THEN IF Rename(o,n)=0 THEN RETURN locs(lo,MSG_RenameErr)
  415. IF FileLength(oni)>0 THEN IF Rename(oni,nni)=0 THEN RETURN StringF(str,'\s Icon',locs(lo,MSG_RenameErr))
  416. ENDPROC -1
  417.  
  418.  
  419. PROC renameD()
  420. mq(locs(lo,MSG_RenAcrossDev))
  421. ENDPROC 0
  422.  
  423. PROC dirtree(file); DEF p,f,l,str[512]:STRING
  424. f:=String(StrLen(file)+5)
  425. StrCopy(f,file,StrLen(file)-StrLen(FilePart(file)) )
  426. IF f[StrLen(f)-1]="/" THEN f[StrLen(f)-1]:=0
  427. p:=FileLength(f)
  428.  
  429.  IF p>0
  430.  muireq(deftitle,locs(lo,MSG_DirIsFile),locs(lo,GAD_Ok),0,0,[f,NIL])
  431.  RETURN 0
  432.  ELSEIF p=0; RETURN TRUE
  433.  ELSE
  434.  
  435.  p:=muireq(deftitle,locs(lo,MSG_NewDir),okcan(),0,0,[f,NIL])
  436.  IF p=0 THEN RETURN FALSE
  437.  p:=0
  438.    WHILE p<>-1
  439.    p:=InStr(file,'/',p)
  440.      IF p<>-1
  441.      StrCopy(f,file,p++)
  442.      l:=FileLength(f)
  443.        IF l>0
  444.        muireq(deftitle,locs(lo,MSG_DirIsFile),locs(lo,GAD_Ok),0,0,[f,NIL])
  445.        RETURN FALSE
  446.        ELSEIF l=-1
  447.        l:=CreateDir(f)
  448.          IF l; UnLock(l)
  449.          ELSE; muireq(deftitle,StringF(str,'\s\n\n%s\n',locs(lo,MSG_DirErr)),locs(lo,GAD_Ok),0,0,[f,NIL])
  450.          RETURN FALSE
  451.          ENDIF
  452.        ENDIF
  453.      ENDIF
  454.    ENDWHILE
  455.  ENDIF
  456. ENDPROC TRUE
  457.  
  458. PROC reqname() HANDLE; DEF ans,lp:PTR TO lvo,n[512]:STRING,str[512]:STRING
  459. doMethodA(lv,[MUIM_List_GetEntry,0,{lp}])
  460. IF strpaths=0
  461. StringF(n,'\s',lp.pth)
  462. get(string,MUIA_String_Contents,{str})
  463. AddPart(n,str,512);
  464. StringF(n,'\s',n)
  465. ELSE
  466. get(string,MUIA_String_Contents,{n})
  467. ENDIF
  468.  
  469.  
  470. ans:=news(masl(n,StrCmp(lp.typ,locs(lo,MSG_File))))
  471. IF (ans[]=0) OR (StrCmp(ans,n)) THEN RETURN
  472.  
  473. set(window,MUIA_Window_ActiveObject,string)
  474. set(string,MUIA_String_Contents,IF strpaths THEN ans ELSE FilePart(ans))
  475. set(string,MUIA_String_BufferPos,IF strpaths THEN StrLen(ans) ELSE StrLen(FilePart(ans)))
  476. set(string,MUIA_BetterString_SelectSize,IF highlight THEN 0-StrLen(FilePart(ans)) ELSE 0)
  477. EXCEPT
  478. ENDPROC
  479.  
  480.  
  481.  
  482. PROC masl(deffle,isFile) HANDLE;
  483. DEF fr:PTR TO filerequester,ret=0,dir[512]:STRING,fle[512]:STRING
  484. StringF(fle,'\s',FilePart(deffle) )
  485. StrCopy(dir,deffle,StrLen(deffle)-StrLen(fle) )
  486. IF dir[StrLen(dir)-1]="/" THEN dir[StrLen(dir)-1]:=0
  487. StringF(dir,'\s',dir)
  488.  
  489.  IF isFile=-1
  490.  fr:=Mui_AllocAslRequest(ASL_FILEREQUEST,
  491.  [ASL_HAIL,deftitle,  ASL_DIR,dir, ASL_FILE,fle, ASL_PATTERN,'#?', ASL_FUNCFLAGS,FILF_PATGAD,FILF_DOWILDFUNC,NIL])
  492.  ELSE
  493.  fr:=Mui_AllocAslRequest(ASL_FILEREQUEST,
  494.  [ASL_HAIL,deftitle,  ASL_DIR,deffle,  ASLFR_DRAWERSONLY,1,  ASL_FUNCFLAGS,FILF_DOWILDFUNC,NIL])
  495.  ENDIF
  496.  
  497. set(window,MUIA_Window_Sleep,1)
  498. IF Mui_AslRequest(fr, NIL);
  499. ret:=String(StrLen(fr.drawer)+(IF isFile THEN StrLen(fr.file) ELSE 0) +2);
  500. StringF(ret,'\s',fr.drawer);
  501. IF isFile THEN AddPart(ret,fr.file,StrMax(ret))
  502. ELSE; ret:='';
  503. StringF(ret,'\s',ret)
  504. ENDIF;
  505. EXCEPT DO;
  506. set(window,MUIA_Window_Sleep,0)
  507. IF fr THEN Mui_FreeAslRequest(fr) ;
  508. SELECT exception ;
  509. CASE ERR_ASL;  WriteF('\s\n',failedOpen('ASL requester'))
  510. CASE ERR_KICK; WriteF('No Kickstart V37\n') ;
  511. ENDSELECT
  512. ENDPROC ret
  513.  
  514. PROC mq(t) IS muireq(deftitle,t,locs(lo,GAD_Ok),app,window)
  515.  
  516. PROC rxsetFunc() HANDLE; DEF v
  517. loadsettings()
  518. doMethodA(wingroup,[MUIM_Group_InitChange])
  519. set(popB,MUIA_ShowMe,popS)
  520. set(lv,MUIA_List_Format,listformat)
  521. set(lv,MUIA_List_Title,listtitle)
  522. top2str()
  523.  IF listshow=0; set(lv,MUIA_ShowMe,0)
  524.  ELSE
  525.  get(lv,MUIA_ShowMe,{v})
  526.   IF v<>listshow
  527.   get(lv,MUIA_List_Entries,{v})
  528.   IF v>1 THEN set(lv,MUIA_ShowMe,1)
  529.   ENDIF
  530.  ENDIF
  531. doMethodA(wingroup,[MUIM_Group_ExitChange])
  532. set(app,MUIA_Application_RexxString,'OK')
  533. EXCEPT
  534. set(app,MUIA_Application_RexxString,'ERROR')
  535. ENDPROC
  536.  
  537. PROC rxaddFunc(d:PTR TO LONG) HANDLE
  538. DEF str[300]:STRING,lp:lvo
  539. StrCopy(str,d[])
  540.  
  541.     IF str[StrLen(str)-1]="/" THEN str[StrLen(str)-1]:=0
  542.      IF str[StrLen(str)-1]=":";
  543.      str[StrLen(str)-1]:=0
  544.      lp:=NEW[typA[0],news(str),'',news(str)]:lvo
  545.      ELSE
  546.      lp:=NEW[type(str),news(FilePart(str)),news(StrCopy(str,str,StrLen(str)-StrLen(FilePart(str)))),news(str)]:lvo
  547.      ENDIF
  548.  
  549.   IF isinlist(lp)=0 THEN doMethodA(lv,[MUIM_List_InsertSingle,lp,MUIV_List_Insert_Sorted])
  550. top2str()
  551. set(app,MUIA_Application_RexxString,news('OK'))
  552. EXCEPT
  553. set(app,MUIA_Application_RexxString,news('ERROR'))
  554. ENDPROC
  555.  
  556.  
  557. PROC failedOpen(name); DEF msg[512]:STRING; StringF(msg,'\s \s',locs(lo,MSG_Open),name); ENDPROC msg
  558.  
  559. PROC setlabel()
  560. StrCopy(labtext,'')
  561. set(label,MUIA_ShowMe,shoT)
  562. IF shoT=0 THEN RETURN
  563. IF typT THEN StringF(labtext,'\e1\ec\s \s ...\e0\en',locs(lo,MSG_EnterName),currenttype)
  564. IF (typT) AND (pthT) THEN StrAdd(labtext,'\n')
  565. IF pthT THEN StringF(labtext,'\s\ec''\s''',labtext,FilePart(current))
  566. doMethodA(app,[MUIM_Application_CheckRefresh])
  567. set(label,MUIA_Text_Contents,labtext)
  568. ENDPROC
  569.  
  570. PROC okcan();DEF s
  571. s:=String(512)
  572. StringF(s,'\s|\s',locs(lo,GAD_Ok),locs(lo,GAD_Cancel))
  573. SetStr(s,StrLen(s))
  574. ENDPROC s
  575.  
  576. PROC openmod(); DEF l,wba:wbarg,f,d,str[512]:STRING
  577. f:=FilePart(prefsmod)
  578. d:=news(StrCopy(str,prefsmod,StrLen(prefsmod)-StrLen(f)))
  579. IF d[StrLen(d)-1]="/" THEN d[StrLen(d)-1]:=0
  580. IF (l:=Lock(d,-2))
  581. IF (scalosbase:=OpenLibrary(SCALOSNAME,0))=NIL THEN Raise(failedOpen('scalos.library'))
  582. wba:=NEW[l,f]:wbarg
  583. ScA_WBStart(wba,[SCA_Stacksize,8192,0],1)
  584. IF scalosbase THEN CloseLibrary(scalosbase)
  585. ELSE
  586. StringF(str,'\s !\nPath:\n\s',failedOpen('Rename.prefs'),prefsmod)
  587. mq(str)
  588. ENDIF
  589. ENDPROC
  590.  
  591. PROC disp1Func(arr:PTR TO LONG,l=0:PTR TO lvo)
  592.   IF l
  593.    arr[]++:= l.typ
  594.    arr[]++:= l.nam
  595.    arr[]++ := l.pth
  596.    arr[] := l.ful
  597.    ELSE
  598.    arr[]++:= listT[0]
  599.    arr[]++:= listT[1]
  600.    arr[]++:= listT[2]
  601.    arr[] := ''
  602.   ENDIF
  603. ENDPROC
  604.  
  605. PROC type(file); DEF lc
  606. lc:=file[StrLen(file)-1]
  607. IF lc=":" THEN RETURN typA[0]
  608.  
  609. lc:= FileLength(file)
  610. IF lc=0 THEN RETURN typA[1]
  611. IF lc=-1 THEN RETURN typA[3]
  612. ENDPROC typA[2]
  613.  
  614. PROC getguide()
  615. guide:=IF volExists('Scalos:',"A") THEN 'Scalos:Docs/Scalos_Rename.guide' ELSE 'Sys:Scalos/Docs/Scalos_Rename.guide'
  616. IF FileLength(guide)<1 THEN guide:='Sys:Expansion/Scalos/Docs/Scalos_Rename.guide' ELSE RETURN
  617. IF FileLength(guide)<1 THEN guide:='Sys:Expansion/Docs/Scalos_Rename.guide' ELSE RETURN
  618. IF FileLength(guide)<1 THEN guide:='help:Scalos_Rename.guide' ELSE RETURN
  619. IF FileLength(guide)>1 THEN RETURN
  620. guide:=0
  621. ENDPROC
  622.  
  623. PROC isinlist(nlp:PTR TO lvo)
  624. DEF it,c,lp=0:PTR TO lvo,s[512]:STRING,str[512]:STRING
  625. get(lv,MUIA_List_Entries,{it})
  626. IF it=0 THEN RETURN 0
  627.   StrCopy(str,nlp.pth)
  628.   IF StrLen(nlp.nam) THEN AddPart(str,nlp.nam,512)
  629.   FOR c:=0 TO it-1
  630.   doMethodA(lv,[MUIM_List_GetEntry,c,{lp}])
  631.   StrCopy(s,lp.pth)
  632.   IF StrLen(lp.nam) THEN AddPart(s,lp.nam,512)
  633.     IF StrCmp(s,str)
  634.     StringF(str,'\eb\e1\s\en\e0 \s\n\el\e1\s\e0\en \s\n\e1\s\e0\en \s',nlp.typ,locs(lo,MSG_InList),locs(lo,MSG_Path),nlp.pth,locs(lo,MSG_Name),nlp.nam)
  635.     mq(str)
  636.     RETURN 1
  637.     ENDIF
  638.   ENDFOR
  639. ENDPROC 0
  640.